<?php
class DbPermalink extends DbObject {

	/**
	 * Busca un permalink existente, devuelve TRUE si lo encuentra, de lo contrario FALSE
	 * 
	 * @param string $permalink
	 * @throws PDOException
	 * @return bool
	 */
	public function get( $permalink ) {

		return $this->setWhere( 'permalink=? OR permalink_eng = ?' )
			->addParam( $permalink )
			->addParam( $permalink )
			->selectOne( 'permalink' );
	}

	/**
	 * Inserta o actualiza un permalink
	 * 
	 * @param int $permalink_id
	 * @param string $permalink
	 * @param string $controller
	 * @param string $action
	 * @throws Exception Si falta el permalink, esta repetido o no se actualiza
	 * @throws PDOException Si ocurre algun error con SQL
	 * @return int ID del permalink insertado/editado
	 */
	public function save( $permalink_id, $permalink, $controller, $action, $permalink_eng ='NULL' ) {

		$permalink = trim( $permalink );
		$permalink_eng= trim( $permalink_eng );
		
		if( empty( $permalink ) ) {
			throw new Exception( 'Introduce el permalink', 1 ); // (sucker)
		}
		else {
			
			// Forzar tipo de dato
			settype( $permalink_id, 'int' );
			
			/*
			 * Primero verificar que el permalink no exista.
			 * Hacemos comparación con el ID para ignorar el permalink
			 * con ID $permalink_id.
			 * Si $permalink_id es 0 (cero) comparará sobre todos los registros =)
			 */
			$permalink_count = $this->setWhere( 'id <> ? AND permalink = ?' )
				->addParam( $permalink_id, PDO::PARAM_INT )
				->addParam( $permalink )
				->selectCount( 'permalink' );
				
			$this->resetQueryProperties();

			if( $permalink_eng != 'NULL' ) {
				$permalink_eng_count = $this->setWhere( 'id <> ? AND permalink_eng = ?' )
					->addParam( $permalink_id, PDO::PARAM_INT )
					->addParam( $permalink_eng )
				->selectCount( 'permalink' );
			} else {
				$permalink_eng_count = 0;
			}
			
			if( $permalink_count > 0 || $permalink_eng_count>0) {
				// Ya existen un permalink igual a $permalink... PELAS PUTO!
				throw new Exception( 'Permalink duplicado, introduce otro.', 2 );
			}
			else {
				
				$fields = array( 
					'permalink' => $permalink, 
					'permalink_eng' => $permalink_eng, 
					'controller' => $controller, 
					'action' => $action 
				);
				
				// Para borrar la configuración del ultimo selectCount()
				$this->resetQueryProperties( );
				
				if( $permalink_id == 0 ) {
					// INSERT
					$permalink_id = $this->insert( 'permalink', $fields );
				}
				else {
					// UPDATE
					$this->setWhere( 'id=?' )
						->addParam( $permalink_id, PDO::PARAM_INT )
						->update( 'permalink', $fields );
				}
				
				return $permalink_id;
			} // end: $permalink_count > 0
		

		} // end: empty($permalink)
	}

	/**
	 * Actualiza el target ID de un permalink
	 * 
	 * @param int $permalink_id
	 * @param int $target_id
	 */
	public function updateTargetId( $permalink_id, $target_id ) {

		$this->setWhere( 'id=?' )
			->addParam( $permalink_id, PDO::PARAM_INT )
			->update( 'permalink', array( 
			'target_id' => array( 
				'value' => $target_id, 
				'type' => PDO::PARAM_INT 
			) 
		) );
	}
}